<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>原型链继承</title>
	</head>
	<body>
		<script >
			// 父类型
			function Supper(){
				this.superProp = "Supper property"
			}
			// 给父类添加属性
			Supper.prototype.showSupperProp = function(){
				console.log(this.supProp)
			}

			// 子类型
			function Sub(){
				this.subProp = "Sub property"
			}

			Sub.prototype.showSubProp = function(){
				console.log(this.subProp)
			}
			
			var sub = new Sub()
			// 如何在sub中调用supper的方法

			/*
			从内容上来说，我们可以在任意地方调用toString
			方法，其本质上来说，是因为我们通过原型链的查找，找到了
			Object的实例
			也就是其实在我们每个对象创建的时间，都执行了这样一条语句
			Sub.prototype = {}
			所以我们可以访问到Object的实例对象，又因为方法的调用会根据自己
			对象的作用域内查找，查找不到会去原型链中查找，找不到就是报错。
			所以我们只要
			【子类型的为父类型的一个实例对象】
			就可以完成继承
			*/
			Sub.prototype = new Supper()
			/*
			不过这样会有些问题，我们知道
			一个正常的函数类型上的显示原型指向Object类型的原型对象，同时
			原型对象上有着创建该函数的构造器，也就是constructor，
			但是上面的写法，就会变成了Sub的构造器，变成了Supper的了。
			所以我们要指回来
			*/
			Sub.prototype.constructor = Sub

		</script>
	</body>
</body>
</html>
